package com.hera.base.web.vaadin.mantenimiento;


import static com.hera.base.util.InputData.getLongData;
import static com.hera.base.util.InputData.getStringData;


import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;

import com.hera.base.util.Constantes;
import com.hera.base.util.FiltroDTO;
import com.hera.base.util.TableCustom;
import com.hera.base.web.BaseUI;
import com.hera.base.web.IConfirmDialog;
import com.hera.base.web.MantenimientoMaestroDetalle;
import com.hera.process.config.domain.Parameter;
import com.hera.process.config.domain.ParameterDetail;
import com.hera.process.config.rest.delegate.ConfigDelegate;
import com.vaadin.annotations.AutoGenerated;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener;
import com.vaadin.event.FieldEvents.TextChangeEvent;
import com.vaadin.event.FieldEvents.TextChangeListener;
import com.vaadin.server.ThemeResource;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.CheckBox;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.TextArea;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;

public class ParameterUI extends BaseUI implements MantenimientoMaestroDetalle,ClickListener {

	/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */

	@AutoGenerated
	private VerticalLayout mainLayout;

	@AutoGenerated
	private VerticalLayout verticalLayout_2;

	@AutoGenerated
	private HorizontalLayout lytDetalle;

	@AutoGenerated
	private VerticalLayout pnlDetalle;

	@AutoGenerated
	private HorizontalLayout horizontalLayout_1;

	@AutoGenerated
	private Button btnEliminarDetalle;

	@AutoGenerated
	private Button btnGuardarDetalle;

	@AutoGenerated
	private TextArea txaDescripcionDetalle;

	@AutoGenerated
	private CheckBox chkActivoDetalle;

	@AutoGenerated
	private HorizontalLayout horizontalLayout_3;

	@AutoGenerated
	private TextField txtValorDetalle;

	@AutoGenerated
	private TextField txtCodigoDetalle;

	@AutoGenerated
	private HorizontalLayout horizontalLayout_2;

	@AutoGenerated
	private TextField txtOrdenDetalle;

	@AutoGenerated
	private TextField txtNombreDetalle;

	@AutoGenerated
	private Label lblTituloDetalle;

	@AutoGenerated
	private HorizontalLayout lytTablaDetalle;

	@AutoGenerated
	private TableCustom tblfDetalle;

	@AutoGenerated
	private HorizontalLayout lytMaestro;

	@AutoGenerated
	private VerticalLayout pnlFormulario;

	@AutoGenerated
	private HorizontalLayout hlytBotonera;

	@AutoGenerated
	private Button btnEliminarMaestro;

	@AutoGenerated
	private Button btnGuardarMaestro;

	@AutoGenerated
	private TextArea txaDescripcionMaestro;

	@AutoGenerated
	private CheckBox chkActivoMaestro;

	@AutoGenerated
	private TextField txtNombreMaestro;

	@AutoGenerated
	private TextField txtCodigoMaestro;

	@AutoGenerated
	private Label lblTitulo;

	@AutoGenerated
	private HorizontalLayout lytTablaMaestra;

	@AutoGenerated
	private TableCustom tblfMaestro;

	private static final Logger log = Logger.getLogger(ParameterUI.class);
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 6354364049021506958L;

	@Autowired
	ConfigDelegate configDelegate;
	boolean esNuevo;
	boolean esNuevoDetalle;
	Parameter parameter;
	ParameterDetail parameterDetail;
	
	/**
	 * The constructor should first build the main layout, set the composition
	 * root and then do any custom initialization.
	 * 
	 * The constructor will not be automatically regenerated by the visual
	 * editor.
	 */
	public ParameterUI() {
		buildMainLayout();
		setCompositionRoot(mainLayout);
	}
	
	@Override
	protected void postConstruct() {
		cargarFormulario();
		buscarMaestro();
		buscarDetalle();
		habilitarControlesDetalle(false);
	}
	
	public void habilitarControlesDetalle(boolean habilitar){
		 
		txtCodigoDetalle.setEnabled(habilitar);
		txtOrdenDetalle.setEnabled(habilitar);
		txtNombreDetalle.setEnabled(habilitar);
		txtValorDetalle.setEnabled(habilitar);
		chkActivoDetalle.setEnabled(habilitar);

		txaDescripcionDetalle.setEnabled(habilitar);
		btnGuardarDetalle.setEnabled(habilitar);
		btnEliminarDetalle.setEnabled(habilitar);
	}
	

	@Override
	public void cargarFormulario(){
		log.info("inicio cargarFormulario");
		esNuevo=true;
		parameter=null;
		esNuevoDetalle=true;
		parameterDetail=null;
		
		txtCodigoMaestro.setCaption("Código: *");
		txtNombreMaestro.setCaption("Nombre: *");
		txaDescripcionMaestro.setCaption("Descripción: ");
		txtCodigoMaestro.addStyleName(Constantes.VALIDACION_CAMPOS.CAMPO_REQUERIDO);
		txtNombreMaestro.addStyleName(Constantes.VALIDACION_CAMPOS.CAMPO_REQUERIDO);
		txtNombreMaestro.setMaxLength(50);
		txtCodigoMaestro.setMaxLength(50);
		txaDescripcionMaestro.setMaxLength(200);
		txaDescripcionMaestro.setNullRepresentation(StringUtils.EMPTY);
			
		txtCodigoDetalle.setCaption("Código: *");
		txtOrdenDetalle.setCaption("Orden: *");
		txtValorDetalle.setCaption("Valor: *");
		txtNombreDetalle.setCaption("Nombre: *");
		txaDescripcionDetalle.setCaption("Descripción: ");
		txtCodigoDetalle.addStyleName(Constantes.VALIDACION_CAMPOS.CAMPO_REQUERIDO);
		txtOrdenDetalle.addStyleName(Constantes.VALIDACION_CAMPOS.CAMPO_REQUERIDO);
		txtOrdenDetalle.addStyleName(Constantes.VALIDACION_CAMPOS.ENTERO);
		txtValorDetalle.addStyleName(Constantes.VALIDACION_CAMPOS.CAMPO_REQUERIDO);
		txtNombreDetalle.addStyleName(Constantes.VALIDACION_CAMPOS.CAMPO_REQUERIDO);
				
		txtCodigoDetalle.setMaxLength(16);
		txtOrdenDetalle.setMaxLength(3);
		txtNombreDetalle.setMaxLength(50);
		txtValorDetalle.setMaxLength(100);
		txaDescripcionDetalle.setMaxLength(200);
		
		hlytBotonera.setStyleName("buttoncust");
		btnEliminarMaestro.setVisible(false);
		btnEliminarMaestro.addClickListener(this);
		btnGuardarMaestro.addClickListener(this);
				
		horizontalLayout_1.setStyleName("buttoncust");
		btnEliminarDetalle.setVisible(false);
		btnEliminarDetalle.addClickListener(this);
		btnGuardarDetalle.addClickListener(this);
				
		txaDescripcionDetalle.setNullRepresentation(StringUtils.EMPTY);
		
		tblfMaestro.setTitulo("Maestro de Parámetros");
		tblfMaestro.setHeight("200px");
		
		tblfMaestro.addColumn("code", "Código", 150, true, String.class);
		tblfMaestro.addColumn("name", "Nombre", 250, true, String.class);
		tblfMaestro.addColumn("status", "Estado", 80, true, String.class);
		tblfMaestro.construir();
		tblfMaestro.addTextChangeListener(new TextChangeListener() {
			private static final long serialVersionUID = 1L;
			@Override
			public void textChange(TextChangeEvent event) {				
				buscarMaestro(event);				
			}
		});
		tblfMaestro.addValueChangeListener(new ValueChangeListener() {
			private static final long serialVersionUID = 1L;
			@Override
			public void valueChange(ValueChangeEvent event) {
				removeStyleNotValidAllControllers();
				parameter=(Parameter)tblfMaestro.getSelectedItem(event);
				esNuevo=(parameter==null);
				tblfDetalle.limpiarFiltro();
				if(esNuevo){
					limpiarMaestro();
					habilitarControlesDetalle(false);
					tblfDetalle.setLstData(new ArrayList<Parameter>());
				}else{
					btnEliminarMaestro.setVisible(true);
					
					txtCodigoMaestro.setValue(parameter.getCode());
					txtNombreMaestro.setValue(parameter.getName());
					txaDescripcionMaestro.setValue(parameter.getDescription());
					chkActivoMaestro.setValue(parameter.getStatus().equals(Constantes.STATUS.ACTIVO));
					habilitarControlesDetalle(true);
					buscarDetalle();
				}				
			}
		});		
		
		tblfDetalle.setHeight("210px");
		tblfDetalle.setTitulo("Valores de Parámetros");
		tblfDetalle.addColumn("order", "Orden", 40, true, Long.class);
		tblfDetalle.addColumn("name", "Nombre", 150, true, String.class);
		tblfDetalle.addColumn("code", "Código", 100, true, String.class);
		tblfDetalle.addColumn("value", "Valor", 100, true, String.class);
		tblfDetalle.addColumn("status", "Estado", 60, true, String.class);
		tblfDetalle.construir();		
		tblfDetalle.addTextChangeListener(new TextChangeListener() {
		
			private static final long serialVersionUID = 1L;
			@Override
			public void textChange(TextChangeEvent event) {
				buscarDetalle(event);				
			}
		});
		tblfDetalle.addValueChangeListener(new ValueChangeListener() {		
			private static final long serialVersionUID = 1L;
			@Override
			public void valueChange(ValueChangeEvent event) {
				removeStyleNotValidDetalleControllers();
				parameterDetail=(ParameterDetail)tblfDetalle.getSelectedItem(event);
				esNuevoDetalle=(parameterDetail==null);
				if(esNuevoDetalle){
					limpiarDetalle();
					
				}else{
					btnEliminarDetalle.setVisible(true);
					
										
					
					
					txtCodigoDetalle.setValue(parameterDetail.getCode());
					txtOrdenDetalle.setValue(parameterDetail.getOrder().toString());
					txtNombreDetalle.setValue(parameterDetail.getName());
					txtValorDetalle.setValue(parameterDetail.getValue());
					txaDescripcionDetalle.setValue(parameterDetail.getDescription());
					chkActivoDetalle.setValue(parameterDetail.getStatus().equals(Constantes.STATUS.ACTIVO));

				}				
			}
		});
		log.info("fin cargarFormulario");
	}
	
	public void removeStyleNotValidAllControllers(){
		removeStyleNotValidMaestroControllers();
		removeStyleNotValidDetalleControllers();
	}
	
	public void removeStyleNotValidMaestroControllers(){
		txtCodigoMaestro.removeStyleName(Constantes.VALIDACION_CAMPOS.CAMPO_REQUERIDO_VACIO);
		txtNombreMaestro.removeStyleName(Constantes.VALIDACION_CAMPOS.CAMPO_REQUERIDO_VACIO);
		txaDescripcionMaestro.removeStyleName(Constantes.VALIDACION_CAMPOS.CAMPO_REQUERIDO_VACIO);
	}
	
	public void removeStyleNotValidDetalleControllers(){
		txtNombreDetalle.removeStyleName(Constantes.VALIDACION_CAMPOS.CAMPO_REQUERIDO_VACIO);
		txtOrdenDetalle.removeStyleName(Constantes.VALIDACION_CAMPOS.CAMPO_REQUERIDO_VACIO);
		txtCodigoDetalle.removeStyleName(Constantes.VALIDACION_CAMPOS.CAMPO_REQUERIDO_VACIO);
		txtValorDetalle.removeStyleName(Constantes.VALIDACION_CAMPOS.CAMPO_REQUERIDO_VACIO);
		txaDescripcionMaestro.removeStyleName(Constantes.VALIDACION_CAMPOS.CAMPO_REQUERIDO_VACIO);
		
	}
	
	@Override
	public void buscarMaestro() {
		buscarMaestro(null);
	}
	
	@Override
	public void buscarMaestro(TextChangeEvent event) {
		log.info("inicio buscarMaestro");
		FiltroDTO filtroDTO=tblfMaestro.getFiltroDTO(event);
		filtroDTO.addOrdenamientoAscendente("name");
		List<Parameter> lstParameter=configDelegate.findAllParameter(filtroDTO);
		tblfMaestro.setLstData(lstParameter);
		limpiarMaestro();
		log.info("fin buscarMaestro");
	}
	
	@Override
	public void limpiarMaestro() {
		log.info("inicio limpiarMaestro");
		btnEliminarMaestro.setVisible(false);		
		txtCodigoMaestro.setValue("");
		txtNombreMaestro.setValue("");
		txaDescripcionMaestro.setValue("");	
		btnGuardarDetalle.setVisible(false);	
		chkActivoMaestro.setValue(false);
		log.info("fin limpiarMaestro");
	}

	@Override
	public void eliminarMaestro() {
		log.info("inicio eliminarMaestro");
		mostrarConfirmacion(new IConfirmDialog() {			
			@Override
			public void cancelar(Button event, Window window) {
				window.close();				
			}			
			@Override
			public void aceptar(Button event, Window window) {
				window.close();
				configDelegate.deleteParameter(parameter);
				buscarMaestro();
				limpiarMaestro();
			}
		});		
		log.info("fin eliminarMaestro");		
	}

	@Override
	public void guardarMaestro() {
		log.info("inicio guardarMaestro");
		if(esNuevo){
			parameter=new Parameter();
			obtenerDatosFormulario(parameter);
			configDelegate.createParameter(parameter);
		}else{
			obtenerDatosFormulario(parameter);
			configDelegate.updateParameter(parameter);
		}
		limpiarMaestro();
		buscarMaestro();
		log.info("fin guardarMaestro");
	}

	@Override
	public void buscarDetalle() {
		buscarDetalle(null);		
	}

	@Override
	public void buscarDetalle(TextChangeEvent event) {
		if(parameter==null){
			tblfDetalle.setLstData(new ArrayList<ParameterDetail>());	
			return;
		}
		FiltroDTO filtroDTO=tblfDetalle.getFiltroDTO(event);
		filtroDTO.addParametro("parameter.idParameter", parameter.getIdParameter());
		filtroDTO.addOrdenamientoAscendente("order");
		filtroDTO.addOrdenamientoAscendente("name");
		List<ParameterDetail> lstParameterDetail=configDelegate.findAllParameterDetail(filtroDTO);
		tblfDetalle.setLstData(lstParameterDetail);		
		limpiarDetalle();
	}

	@Override
	public void limpiarDetalle() {
		log.info("inicio limpiarDetalle");
		btnEliminarDetalle.setVisible(false);		
		btnGuardarDetalle.setVisible(true);
		txtCodigoDetalle.setValue("");
		txtOrdenDetalle.setValue("");
		txtValorDetalle.setValue("");
		txaDescripcionDetalle.setValue("");
		txtNombreDetalle.setValue("");
		chkActivoDetalle.setValue(false);
		log.info("fin limpiarDetalle");		
	}

	@Override
	public void eliminarDetalle() {			
		log.info("inicio eliminarDetalle");
		mostrarConfirmacion(new IConfirmDialog() {			
			@Override
			public void cancelar(Button event, Window window) {
				window.close();				
			}			
			@Override
			public void aceptar(Button event, Window window) {
				window.close();
				configDelegate.deleteParameterDetail(parameterDetail);
				buscarDetalle();
				limpiarDetalle();
			}
		});		
		log.info("fin eliminarDetalle");		
	}

	@Override
	public void guardarDetalle() {
		if(esNuevoDetalle){
			parameterDetail=new ParameterDetail();
			obtenerDatosFormulario(parameterDetail);
			parameterDetail.setParameter(parameter);
			configDelegate.createParameterDetail(parameterDetail);
		}else{
			obtenerDatosFormulario(parameterDetail);
			configDelegate.updateParameterDetail(parameterDetail);
		}
		limpiarDetalle();
		buscarDetalle();
	}


	@Override
	public void buttonClick(ClickEvent event) {		
		if(event.getButton().equals(btnEliminarMaestro)){
			removeStyleNotValidAllControllers();
			eliminarMaestro();
		}else if(event.getButton().equals(btnGuardarMaestro)){
			removeStyleNotValidAllControllers();
			guardarMaestro();
		}else if(event.getButton().equals(btnEliminarDetalle)){
			removeStyleNotValidDetalleControllers();
			eliminarDetalle();
		}else if(event.getButton().equals(btnGuardarDetalle)){
			removeStyleNotValidDetalleControllers();
			guardarDetalle();
		}		
	}

	private void obtenerDatosFormulario(Parameter parameter) {
		parameter.setCode(getStringData(txtCodigoMaestro,"Código"));
		parameter.setName(getStringData(txtNombreMaestro,"Nombre"));
		parameter.setDescription(getStringData(txaDescripcionMaestro,"Descripción"));
		parameter.setStatus(chkActivoMaestro.getValue()?Constantes.STATUS.ACTIVO:Constantes.STATUS.INACTIVO);
		
	}

	private void obtenerDatosFormulario(ParameterDetail parameterDetail) {
		parameterDetail.setCode(getStringData(txtCodigoDetalle,"Código"));
		parameterDetail.setOrder(getLongData(txtOrdenDetalle,"Orden"));
		parameterDetail.setName(getStringData(txtNombreDetalle,"Nombre"));
		parameterDetail.setValue(getStringData(txtValorDetalle,"Valor"));
		parameterDetail.setDescription(getStringData(txaDescripcionDetalle,"Descripción"));
		parameterDetail.setStatus(chkActivoMaestro.getValue()?Constantes.STATUS.ACTIVO:Constantes.STATUS.INACTIVO);

	}


	@AutoGenerated
	private VerticalLayout buildMainLayout() {
		// common part: create layout
		mainLayout = new VerticalLayout();
		mainLayout.setImmediate(false);
		mainLayout.setWidth("781px");
		mainLayout.setHeight("100%");
		mainLayout.setMargin(false);
		
		// top-level component properties
		setWidth("781px");
		setHeight("100.0%");
		
		// verticalLayout_2
		verticalLayout_2 = buildVerticalLayout_2();
		mainLayout.addComponent(verticalLayout_2);
		
		return mainLayout;
	}

	@AutoGenerated
	private VerticalLayout buildVerticalLayout_2() {
		// common part: create layout
		verticalLayout_2 = new VerticalLayout();
		verticalLayout_2.setImmediate(false);
		verticalLayout_2.setWidth("-1px");
		verticalLayout_2.setHeight("-1px");
		verticalLayout_2.setMargin(false);
		verticalLayout_2.setSpacing(true);
		
		// lytMaestro
		lytMaestro = buildLytMaestro();
		verticalLayout_2.addComponent(lytMaestro);
		
		// lytDetalle
		lytDetalle = buildLytDetalle();
		verticalLayout_2.addComponent(lytDetalle);
		
		return verticalLayout_2;
	}

	@AutoGenerated
	private HorizontalLayout buildLytMaestro() {
		// common part: create layout
		lytMaestro = new HorizontalLayout();
		lytMaestro.setImmediate(false);
		lytMaestro.setWidth("-1px");
		lytMaestro.setHeight("-1px");
		lytMaestro.setMargin(false);
		lytMaestro.setSpacing(true);
		
		// lytTablaMaestra
		lytTablaMaestra = buildLytTablaMaestra();
		lytMaestro.addComponent(lytTablaMaestra);
		
		// pnlFormulario
		pnlFormulario = buildPnlFormulario();
		lytMaestro.addComponent(pnlFormulario);
		
		return lytMaestro;
	}

	@AutoGenerated
	private HorizontalLayout buildLytTablaMaestra() {
		// common part: create layout
		lytTablaMaestra = new HorizontalLayout();
		lytTablaMaestra.setImmediate(false);
		lytTablaMaestra.setWidth("570px");
		lytTablaMaestra.setHeight("-1px");
		lytTablaMaestra.setMargin(false);
		
		// tblfMaestro
		tblfMaestro = new TableCustom();
		tblfMaestro.setImmediate(false);
		tblfMaestro.setWidth("-1px");
		tblfMaestro.setHeight("-1px");
		lytTablaMaestra.addComponent(tblfMaestro);
		
		return lytTablaMaestra;
	}

	@AutoGenerated
	private VerticalLayout buildPnlFormulario() {
		// common part: create layout
		pnlFormulario = new VerticalLayout();
		pnlFormulario.setImmediate(false);
		pnlFormulario.setWidth("-1px");
		pnlFormulario.setHeight("-1px");
		pnlFormulario.setMargin(false);
		pnlFormulario.setSpacing(true);
		
		// lblTitulo
		lblTitulo = new Label();
		lblTitulo.setStyleName("titulo");
		lblTitulo.setImmediate(false);
		lblTitulo.setWidth("-1px");
		lblTitulo.setHeight("-1px");
		lblTitulo.setValue("Parametros");
		pnlFormulario.addComponent(lblTitulo);
		pnlFormulario.setComponentAlignment(lblTitulo, new Alignment(20));
		
		// txtCodigoMaestro
		txtCodigoMaestro = new TextField();
		txtCodigoMaestro.setStyleName("fieldRequired");
		txtCodigoMaestro.setImmediate(false);
		txtCodigoMaestro.setWidth("200px");
		txtCodigoMaestro.setHeight("-1px");
		txtCodigoMaestro.setInputPrompt("Código");
		pnlFormulario.addComponent(txtCodigoMaestro);
		
		// txtNombreMaestro
		txtNombreMaestro = new TextField();
		txtNombreMaestro.setImmediate(false);
		txtNombreMaestro.setWidth("200px");
		txtNombreMaestro.setHeight("-1px");
		txtNombreMaestro.setInputPrompt("Nombre");
		pnlFormulario.addComponent(txtNombreMaestro);
		
		// chkActivoMaestro
		chkActivoMaestro = new CheckBox();
		chkActivoMaestro.setCaption("Activo");
		chkActivoMaestro.setImmediate(false);
		chkActivoMaestro.setWidth("-1px");
		chkActivoMaestro.setHeight("-1px");
		pnlFormulario.addComponent(chkActivoMaestro);
		
		// txaDescripcionMaestro
		txaDescripcionMaestro = new TextArea();
		txaDescripcionMaestro.setImmediate(false);
		txaDescripcionMaestro.setWidth("200px");
		txaDescripcionMaestro.setHeight("65px");
		txaDescripcionMaestro.setInputPrompt("Descripción");
		pnlFormulario.addComponent(txaDescripcionMaestro);
		
		// hlytBotonera
		hlytBotonera = buildHlytBotonera();
		pnlFormulario.addComponent(hlytBotonera);
		
		return pnlFormulario;
	}

	@AutoGenerated
	private HorizontalLayout buildHlytBotonera() {
		// common part: create layout
		hlytBotonera = new HorizontalLayout();
		hlytBotonera.setImmediate(false);
		hlytBotonera.setWidth("-1px");
		hlytBotonera.setHeight("-1px");
		hlytBotonera.setMargin(false);
		hlytBotonera.setSpacing(true);
		
		// btnGuardarMaestro
		btnGuardarMaestro = new Button();
		btnGuardarMaestro.setCaption("");
		btnGuardarMaestro.setIcon(new ThemeResource("images/save_16_2.png"));
		btnGuardarMaestro.setDescription("Grabar");
		btnGuardarMaestro.setImmediate(true);
		btnGuardarMaestro.setWidth("-1px");
		btnGuardarMaestro.setHeight("-1px");
		hlytBotonera.addComponent(btnGuardarMaestro);
		
		// btnEliminarMaestro
		btnEliminarMaestro = new Button();
		btnEliminarMaestro.setCaption("");
		btnEliminarMaestro.setIcon(new ThemeResource("images/trash_16_2.png"));
		btnEliminarMaestro.setDescription("Eliminar");
		btnEliminarMaestro.setImmediate(true);
		btnEliminarMaestro.setWidth("-1px");
		btnEliminarMaestro.setHeight("-1px");
		hlytBotonera.addComponent(btnEliminarMaestro);
		
		return hlytBotonera;
	}

	@AutoGenerated
	private HorizontalLayout buildLytDetalle() {
		// common part: create layout
		lytDetalle = new HorizontalLayout();
		lytDetalle.setImmediate(false);
		lytDetalle.setWidth("-1px");
		lytDetalle.setHeight("-1px");
		lytDetalle.setMargin(false);
		lytDetalle.setSpacing(true);
		
		// lytTablaDetalle
		lytTablaDetalle = buildLytTablaDetalle();
		lytDetalle.addComponent(lytTablaDetalle);
		
		// pnlDetalle
		pnlDetalle = buildPnlDetalle();
		lytDetalle.addComponent(pnlDetalle);
		
		return lytDetalle;
	}

	@AutoGenerated
	private HorizontalLayout buildLytTablaDetalle() {
		// common part: create layout
		lytTablaDetalle = new HorizontalLayout();
		lytTablaDetalle.setImmediate(false);
		lytTablaDetalle.setWidth("570px");
		lytTablaDetalle.setHeight("-1px");
		lytTablaDetalle.setMargin(false);
		
		// tblfDetalle
		tblfDetalle = new TableCustom();
		tblfDetalle.setImmediate(false);
		tblfDetalle.setWidth("-1px");
		tblfDetalle.setHeight("-1px");
		lytTablaDetalle.addComponent(tblfDetalle);
		
		return lytTablaDetalle;
	}

	@AutoGenerated
	private VerticalLayout buildPnlDetalle() {
		// common part: create layout
		pnlDetalle = new VerticalLayout();
		pnlDetalle.setImmediate(false);
		pnlDetalle.setWidth("-1px");
		pnlDetalle.setHeight("-1px");
		pnlDetalle.setMargin(false);
		pnlDetalle.setSpacing(true);
		
		// lblTituloDetalle
		lblTituloDetalle = new Label();
		lblTituloDetalle.setStyleName("titulo");
		lblTituloDetalle.setImmediate(false);
		lblTituloDetalle.setWidth("-1px");
		lblTituloDetalle.setHeight("-1px");
		lblTituloDetalle.setValue("Detalle");
		pnlDetalle.addComponent(lblTituloDetalle);
		pnlDetalle.setComponentAlignment(lblTituloDetalle, new Alignment(20));
		
		// horizontalLayout_2
		horizontalLayout_2 = buildHorizontalLayout_2();
		pnlDetalle.addComponent(horizontalLayout_2);
		
		// horizontalLayout_3
		horizontalLayout_3 = buildHorizontalLayout_3();
		pnlDetalle.addComponent(horizontalLayout_3);
		
		// chkActivoDetalle
		chkActivoDetalle = new CheckBox();
		chkActivoDetalle.setCaption("Activo");
		chkActivoDetalle.setImmediate(false);
		chkActivoDetalle.setWidth("-1px");
		chkActivoDetalle.setHeight("-1px");
		pnlDetalle.addComponent(chkActivoDetalle);
		
		// txaDescripcionDetalle
		txaDescripcionDetalle = new TextArea();
		txaDescripcionDetalle.setImmediate(false);
		txaDescripcionDetalle.setWidth("200px");
		txaDescripcionDetalle.setHeight("65px");
		txaDescripcionDetalle.setInputPrompt("Descripción");
		pnlDetalle.addComponent(txaDescripcionDetalle);
		
		// horizontalLayout_1
		horizontalLayout_1 = buildHorizontalLayout_1();
		pnlDetalle.addComponent(horizontalLayout_1);
		
		return pnlDetalle;
	}

	@AutoGenerated
	private HorizontalLayout buildHorizontalLayout_2() {
		// common part: create layout
		horizontalLayout_2 = new HorizontalLayout();
		horizontalLayout_2.setImmediate(false);
		horizontalLayout_2.setWidth("-1px");
		horizontalLayout_2.setHeight("-1px");
		horizontalLayout_2.setMargin(false);
		horizontalLayout_2.setSpacing(true);
		
		// txtNombreDetalle
		txtNombreDetalle = new TextField();
		txtNombreDetalle.setImmediate(false);
		txtNombreDetalle.setWidth("135px");
		txtNombreDetalle.setHeight("-1px");
		txtNombreDetalle.setInputPrompt("Nombre");
		horizontalLayout_2.addComponent(txtNombreDetalle);
		
		// txtOrdenDetalle
		txtOrdenDetalle = new TextField();
		txtOrdenDetalle.setImmediate(false);
		txtOrdenDetalle.setWidth("60px");
		txtOrdenDetalle.setHeight("-1px");
		txtOrdenDetalle.setInputPrompt("Orden");
		horizontalLayout_2.addComponent(txtOrdenDetalle);
		
		return horizontalLayout_2;
	}

	@AutoGenerated
	private HorizontalLayout buildHorizontalLayout_3() {
		// common part: create layout
		horizontalLayout_3 = new HorizontalLayout();
		horizontalLayout_3.setImmediate(false);
		horizontalLayout_3.setWidth("-1px");
		horizontalLayout_3.setHeight("-1px");
		horizontalLayout_3.setMargin(false);
		horizontalLayout_3.setSpacing(true);
		
		// txtCodigoDetalle
		txtCodigoDetalle = new TextField();
		txtCodigoDetalle.setImmediate(false);
		txtCodigoDetalle.setWidth("98px");
		txtCodigoDetalle.setHeight("-1px");
		txtCodigoDetalle.setInputPrompt("Código");
		horizontalLayout_3.addComponent(txtCodigoDetalle);
		
		// txtValorDetalle
		txtValorDetalle = new TextField();
		txtValorDetalle.setImmediate(false);
		txtValorDetalle.setWidth("98px");
		txtValorDetalle.setHeight("-1px");
		txtValorDetalle.setInputPrompt("Valor");
		horizontalLayout_3.addComponent(txtValorDetalle);
		
		return horizontalLayout_3;
	}

	@AutoGenerated
	private HorizontalLayout buildHorizontalLayout_1() {
		// common part: create layout
		horizontalLayout_1 = new HorizontalLayout();
		horizontalLayout_1.setImmediate(false);
		horizontalLayout_1.setWidth("-1px");
		horizontalLayout_1.setHeight("-1px");
		horizontalLayout_1.setMargin(false);
		horizontalLayout_1.setSpacing(true);
		
		// btnGuardarDetalle
		btnGuardarDetalle = new Button();
		btnGuardarDetalle.setCaption("");
		btnGuardarDetalle.setIcon(new ThemeResource("images/save_16_2.png"));
		btnGuardarDetalle.setDescription("Guardar");
		btnGuardarDetalle.setImmediate(true);
		btnGuardarDetalle.setWidth("-1px");
		btnGuardarDetalle.setHeight("-1px");
		horizontalLayout_1.addComponent(btnGuardarDetalle);
		
		// btnEliminarDetalle
		btnEliminarDetalle = new Button();
		btnEliminarDetalle.setCaption("");
		btnEliminarDetalle.setIcon(new ThemeResource("images/trash_16_2.png"));
		btnEliminarDetalle.setDescription("Eliminar");
		btnEliminarDetalle.setImmediate(true);
		btnEliminarDetalle.setWidth("-1px");
		btnEliminarDetalle.setHeight("-1px");
		horizontalLayout_1.addComponent(btnEliminarDetalle);
		
		return horizontalLayout_1;
	}

	

}
